미니배치(Minibatch) 생성과정
AI 모델을 초고속으로 학습시키는 GPU는 반듯하게 정렬된 숫자 블록(텐서)만 이해하고 처리할 수 있습니다. 하지만 우리가 다루는 텍스트는 문장마다 길이가 제각각인, 불규칙한 데이터의 연속입니다.
이 둘 사이의 간극을 메우는 기술이 바로 미니배치 생성 과정입니다.
1. 텍스트를 숫자로 변환하기
1단계 :
텍스트를 숫자 리스트로 변환
가장 먼저 해결할 문제는 "글자를 어떻게 숫자로 바꾸는가?"입니다.
GPU는 '사과'라는 글자를 직접 이해하지 못하므로, 우리는 일종의 '단어-숫자 번역사전(Vocabulary)'을 만듭니다.
단어장 생성 및 인덱싱
텍스트에 있는 모든 고유 단어(토큰)를 모아 번호표를 붙여 단어장을 생성한 뒤, 이 단어장을 기준으로 문장을 숫자들의 나열(리스트)로 바꿉니다.
단어장
{'<pad>': 0, '나': 1, '는': 2, '사과': 3, '를': 4, ...}
인덱싱
['나', '는', '사과', '를'] → [1, 2, 3, 4]
2. 숫자 리스트를 텐서로 결합하기
2단계 :
길이를 통일하여 텐서(Tensor)로 결합
이제 모든 문장이 숫자 리스트로 바뀌었지만, 아직 "문장마다 길이가 다르다"는 문제가 남아있습니다.
길이가 다른 리스트들은 GPU가 한 번에 처리할 수 있는 반듯한 직사각형 형태로 쌓을 수 없습니다.
패딩(Padding)
한 묶음(미니배치) 내에서 가장 긴 문장을 기준으로,
나머지 짧은 문장들의 뒷부분을 의미 없는 특별 토큰 <pad>의 인덱스(0)로 채워 길이를 똑같이 맞춥니다.
패딩 적용 전
[1, 2, 3, 4] (길이 4)
[1, 5, 6] (길이 3) 패딩 적용 후
[1, 2, 3, 4]
[1, 5, 6, 0]
이제 길이가 같아진 숫자 리스트들을 차곡차곡 쌓으면,
GPU가 원하는 최종 데이터 형태인 텐서(Tensor), 즉 미니배치가 완성됩니다.
3. 왜 미니배치를 사용하는가?
계산 효율성과 학습 안정성
미니배치(Minibatch)는 전체 학습 데이터셋을 여러 개의 작은 묶음으로 나눈 것입니다.
이렇게 데이터를 쪼개서 사용하는 이유는 크게 계산 효율성과 학습 안정성 두 가지입니다.
계산 효율성 (Computational Efficiency)
여러 개의 데이터 샘플(벡터)을 하나의 미니배치(행렬/텐서)로 묶어서 전달하면,
GPU는 병렬 처리를 통해 훨씬 빠른 속도로 연산을 수행할 수 있습니다.
학습 안정성 (Training Stability)
모델은 데이터의 예측 오차(그래디언트)를 기반으로 학습합니다.
미니배치는 이 오차 계산에서 다음과 같은 장점을 가집니다.
- 데이터 1개만 사용
기울기가 불안정하고 노이즈가 심해, 학습 방향이 크게 흔들릴 수 있습니다. - 전체 데이터 사용
기울기는 가장 정확하지만, 계산에 많은 시간과 메모리가 소요됩니다. - 미니배치 사용
전체 데이터 기울기에 대한 효율적인 근사치(approximation) 역할을 합니다. 빠른 속도와 안정적인 학습 방향이라는 두 마리 토끼를 모두 잡는 가장 현실적인 방법입니다.
4. 전체 프로세스 요약
자연어 처리 기본 파이프라인
미니배치가 전체 과정에서 어디에 위치하는지 큰 그림으로 이해해 봅시다.
- 데이터 수집
모델 학습에 필요한 텍스트 데이터를 수집합니다. - 텍스트 전처리
수집한 텍스트에서 불필요한 기호, 오탈자 등을 제거하고 정제합니다. - 벡터화 (Vectorization)
정제된 텍스트를 토큰화하고, 인덱싱과 패딩 과정을 거쳐 모델이 이해할 수 있는 숫자 텐서로 변환합니다. - 모델 학습 (Model Training)
벡터화된 데이터를 모델에 입력하여 가중치를 업데이트하며 학습을 진행합니다. - 모델 평가 및 배포
학습된 모델의 성능을 평가하고, 실제 서비스에 적용합니다.
⭐ 미니배치의 역할
바로 이 4. 모델 학습 단계에서, 전체 데이터셋을 GPU가 한 번에 처리할 수 있는 작은 묶음,
즉 미니배치로 나누어 모델에 순서대로 주입합니다.
모델은 미니배치 하나를 처리할 때마다 가중치를 한 번씩 업데이트합니다.